home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / pascal / tvtool2.zip / TVVIEWS.PAS < prev   
Pascal/Delphi Source File  |  1993-07-20  |  36KB  |  318 lines

  1. {*
  2. *
  3. *   Copyright (c) 1992,93 by Richard W. Hansen
  4. *
  5. *   This source code will compile.
  6. *   Full source code available to registered users.
  7. *
  8. *}
  9. (* This file was mangled by Mangler 1.10 (c) Copyright 1993 by Berend de Boer *)
  10.  UNIT TVVIEWS ;{$B+} {$X+} {$V-} {$I TVDEFS.INC} INTERFACE USES TVTYPE , TVCONST , TVMENUS , APP , DRIVERS , MENUS ,
  11. OBJECTS , VIEWS , TEXTVIEW , DOS ;CONST CPOSINDICATOR =#2#3;CMINMAX =#3#2#3;TYPE PBXFRAME =^TBXFRAME ;
  12. TBXFRAME =OBJECT (TFRAME)PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;PBXMINMAXBUTTON =^TBXMINMAXBUTTON ;
  13. TBXMINMAXBUTTON =OBJECT (TVIEW)CONSTRUCTOR INIT (VAR BOUNDS :TRECT );PROCEDURE DRAW ;VIRTUAL;FUNCTION GETPALETTE
  14. :PPALETTE ;VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;
  15. ENABLE :BOOLEAN );VIRTUAL;END ;PBXICON =^TBXICON ;TBXICON =OBJECT (TVIEW)TITLE :PSTRING ;CONSTRUCTOR INIT
  16. (ATITLE :TTITLESTR );CONSTRUCTOR LOAD (VAR S :TSTREAM );DESTRUCTOR DONE ;VIRTUAL;PROCEDURE DRAW ;VIRTUAL;
  17. FUNCTION GETPALETTE :PPALETTE ;VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE SETSTATE
  18. (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;PROCEDURE SIZELIMITS (VAR MIN ,MAX:TPOINT );VIRTUAL;PROCEDURE STORE
  19. (VAR S :TSTREAM );END ;PBXWINDOWICON =^TBXWINDOWICON ;TBXWINDOWICON =OBJECT (TBXICON)VIEW :PVIEW ;CONSTRUCTOR INIT
  20. (ATITLE :TTITLESTR ;AVIEW :PVIEW );CONSTRUCTOR LOAD (VAR S :TSTREAM );PROCEDURE CONTROLMENU (MOUSE :BOOLEAN );
  21. PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;
  22. PROCEDURE STORE (VAR S :TSTREAM );END ;PBXWINDOW =^TBXWINDOW ;TBXWINDOW =OBJECT (TWINDOW)MINMAX :PBXMINMAXBUTTON ;
  23. ICON :PBXWINDOWICON ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;ATITLE :TTITLESTR ;ANUMBER :INTEGER );CONSTRUCTOR LOAD
  24. (VAR S :TSTREAM );PROCEDURE CONTROLMENU (MOUSE :BOOLEAN );PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;
  25. PROCEDURE INITFRAME ;VIRTUAL;PROCEDURE INITICON ;VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;
  26. PROCEDURE STORE (VAR S :TSTREAM );END ;PBXTEXTWINDOW =^TBXTEXTWINDOW ;
  27. TBXTEXTWINDOW =OBJECT (TBXWINDOW)INTERIOR :PTERMINAL ;HSCROLLBAR :PSCROLLBAR ;VSCROLLBAR :PSCROLLBAR ;WIDTH :BYTE ;
  28. HEIGHT :BYTE ;CONSTRUCTOR INIT (BOUNDS :TRECT ;WINTITLE :STRING ;WINNUMBER :WORD ;AOPTIONS :WORD ;AMAXLINES :WORD );
  29. CONSTRUCTOR LOAD (VAR S :TSTREAM );PROCEDURE CLEAR ;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE STORE
  30. (VAR S :TSTREAM );PROCEDURE WRITE (ST :STRING );END ;PBXFORMATTEDTEXTSCROLLER =^TBXFORMATTEDTEXTSCROLLER ;
  31. TBXFORMATTEDTEXTSCROLLER =OBJECT (TSCROLLER)BUF :PBXCHARARRAY ;BUFSIZE :WORD ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;
  32. AVSCROLLBAR :PSCROLLBAR ;BUFF :PBXCHARARRAY ;BUFFSIZE :WORD );CONSTRUCTOR LOAD (VAR S :TSTREAM );PROCEDURE CHANGEBOUNDS
  33. (VAR BOUNDS :TRECT );VIRTUAL;FUNCTION DATASIZE :WORD ;VIRTUAL;PROCEDURE DRAW ;VIRTUAL;PROCEDURE GETDATA (VAR REC );
  34. VIRTUAL;PROCEDURE SETDATA (VAR REC );VIRTUAL;PRIVATE PROCEDURE COUNTLINES ;PROCEDURE GETNEXTLINE (FIRST :WORD ;
  35. VAR COUNT :WORD ;VAR NEXTCH :WORD );END ;PBXPOSINDICATOR =^TBXPOSINDICATOR ;
  36. TBXPOSINDICATOR =OBJECT (TVIEW)POS :LONGINT ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT );CONSTRUCTOR LOAD (VAR S :TSTREAM );
  37. FUNCTION DATASIZE :WORD ;VIRTUAL;PROCEDURE DRAW ;VIRTUAL;PROCEDURE GETDATA (VAR REC );VIRTUAL;FUNCTION GETPALETTE
  38. :PPALETTE ;VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;PROCEDURE SETDATA (VAR REC );VIRTUAL;
  39. PROCEDURE STORE (VAR S :TSTREAM );END ;PBXMULTISCROLLBAR =^TBXMULTISCROLLBAR ;
  40. TBXMULTISCROLLBAR =OBJECT (TSCROLLBAR)DESTRUCTOR DONE ;VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );
  41. VIRTUAL;END ;PBXEDITBUFF =^TBXEDITBUFF ;TBXEDITBUFF =OBJECT (TSCROLLER)BUF :PBXBYTEARRAY ;BUFSIZE :WORD ;
  42. ITEMSIZE :BYTE ;CONSTRUCTOR INIT (BOUNDS :TRECT ;BUFF :POINTER ;BUFFSIZE :WORD ;ITEMWIDTH :BYTE ;
  43. AVSCROLLBAR :PSCROLLBAR );CONSTRUCTOR LOAD (VAR S :TSTREAM );FUNCTION DATASIZE :WORD ;VIRTUAL;PROCEDURE GETDATA
  44. (VAR REC );VIRTUAL;FUNCTION GETOFFSET :WORD ;PROCEDURE GETXY (VAR POS :TPOINT );PROCEDURE HANDLEEVENT
  45. (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE SETDATA (VAR REC );VIRTUAL;PROCEDURE SETXY (POS :TPOINT );PROCEDURE STORE
  46. (VAR S :TSTREAM );END ;PBXASCIIBUFF =^TBXASCIIBUFF ;TBXASCIIBUFF =OBJECT (TBXEDITBUFF)CONSTRUCTOR INIT (BOUNDS :TRECT ;
  47. BUFF :POINTER ;BUFFSIZE :WORD ;AVSCROLLBAR :PSCROLLBAR );PROCEDURE DRAW ;VIRTUAL;PROCEDURE HANDLEEVENT
  48. (VAR EVENT :TEVENT );VIRTUAL;END ;PBXHEXBUFF =^TBXHEXBUFF ;TBXHEXBUFF =OBJECT (TBXEDITBUFF)CONSTRUCTOR INIT
  49. (BOUNDS :TRECT ;BUFF :POINTER ;BUFFSIZE :WORD ;AVSCROLLBAR :PSCROLLBAR );PROCEDURE DRAW ;VIRTUAL;PROCEDURE HANDLEEVENT
  50. (VAR EVENT :TEVENT );VIRTUAL;END ;PBXASCIIHEXEDITOR =^TBXASCIIHEXEDITOR ;
  51. TBXASCIIHEXEDITOR =OBJECT (TBXWINDOW)MAXPOS :WORD ;LVIEW :PBXEDITBUFF ;RVIEW :PBXEDITBUFF ;
  52. VSCROLLBAR :PBXMULTISCROLLBAR ;INDICATOR :PBXPOSINDICATOR ;MODIFIED :BOOLEAN ;CONSTRUCTOR INIT (BOUNDS :TRECT ;
  53. ATITLE :TTITLESTR ;ANUMBER :INTEGER ;AOPTIONS :WORD ;BUFF :POINTER ;BUFFSIZE :WORD );CONSTRUCTOR LOAD (VAR S :TSTREAM );
  54. FUNCTION DATASIZE :WORD ;VIRTUAL;PROCEDURE GETDATA (VAR REC );VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );
  55. VIRTUAL;PROCEDURE SETDATA (VAR REC );VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;
  56. PROCEDURE SIZELIMITS (VAR MIN ,MAX:TPOINT );VIRTUAL;PROCEDURE STORE (VAR S :TSTREAM );END ;
  57. WINDATA =RECORD DEVICE :PTEXTDEVICE ;FILLER :ARRAY [ 1 .. 12 ]  OF CHAR ;END ;TBXBUFDATA =RECORD DATA :POINTER ;
  58. DATASIZE :WORD ;END ;PROCEDURE ASSIGNOUTPUT (VAR F :TEXT ;AWINDOW :PBXTEXTWINDOW );PROCEDURE REGISTERTVVIEWS ;
  59. CONST RBXFRAME :TSTREAMREC =(OBJTYPE :5100 ;VMTLINK :OFS (TYPEOF (TBXFRAME )^);LOAD :@ TBXFRAME . LOAD ;STORE :@
  60. TBXFRAME . STORE );CONST RBXMINMAXBUTTON :TSTREAMREC =(OBJTYPE :5101 ;VMTLINK :OFS (TYPEOF (TBXMINMAXBUTTON )^);LOAD :@
  61. TBXMINMAXBUTTON . LOAD ;STORE :@ TBXMINMAXBUTTON . STORE );CONST RBXICON :TSTREAMREC =(OBJTYPE :5102 ;
  62. VMTLINK :OFS (TYPEOF (TBXICON )^);LOAD :@ TBXICON . LOAD ;STORE :@ TBXICON . STORE );
  63. CONST RBXWINDOWICON :TSTREAMREC =(OBJTYPE :5103 ;VMTLINK :OFS (TYPEOF (TBXWINDOWICON )^);LOAD :@ TBXWINDOWICON . LOAD ;
  64. STORE :@ TBXWINDOWICON . STORE );CONST RBXWINDOW :TSTREAMREC =(OBJTYPE :5104 ;VMTLINK :OFS (TYPEOF (TBXWINDOW )^);
  65. LOAD :@ TBXWINDOW . LOAD ;STORE :@ TBXWINDOW . STORE );CONST RBXTEXTWINDOW :TSTREAMREC =(OBJTYPE :5105 ;
  66. VMTLINK :OFS (TYPEOF (TBXTEXTWINDOW )^);LOAD :@ TBXTEXTWINDOW . LOAD ;STORE :@ TBXTEXTWINDOW . STORE );
  67. CONST RBXFORMATTEDTEXTSCROLLER :TSTREAMREC =(OBJTYPE :5106 ;VMTLINK :OFS (TYPEOF (TBXFORMATTEDTEXTSCROLLER )^);LOAD :@
  68. TBXFORMATTEDTEXTSCROLLER . LOAD ;STORE :@ TBXFORMATTEDTEXTSCROLLER . STORE );
  69. CONST RBXPOSINDICATOR :TSTREAMREC =(OBJTYPE :5107 ;VMTLINK :OFS (TYPEOF (TBXPOSINDICATOR )^);LOAD :@ TBXPOSINDICATOR .
  70. LOAD ;STORE :@ TBXPOSINDICATOR . STORE );CONST RBXMULTISCROLLBAR :TSTREAMREC =(OBJTYPE :5108 ;
  71. VMTLINK :OFS (TYPEOF (TBXMULTISCROLLBAR )^);LOAD :@ TBXMULTISCROLLBAR . LOAD ;STORE :@ TBXMULTISCROLLBAR . STORE );
  72. CONST RBXEDITBUFF :TSTREAMREC =(OBJTYPE :5109 ;VMTLINK :OFS (TYPEOF (TBXEDITBUFF )^);LOAD :@ TBXEDITBUFF . LOAD ;
  73. STORE :@ TBXEDITBUFF . STORE );CONST RBXASCIIBUFF :TSTREAMREC =(OBJTYPE :5110 ;VMTLINK :OFS (TYPEOF (TBXASCIIBUFF )^);
  74. LOAD :@ TBXASCIIBUFF . LOAD ;STORE :@ TBXASCIIBUFF . STORE );CONST RBXHEXBUFF :TSTREAMREC =(OBJTYPE :5111 ;
  75. VMTLINK :OFS (TYPEOF (TBXHEXBUFF )^);LOAD :@ TBXHEXBUFF . LOAD ;STORE :@ TBXHEXBUFF . STORE );
  76. CONST RBXASCIIHEXEDITOR :TSTREAMREC =(OBJTYPE :5112 ;VMTLINK :OFS (TYPEOF (TBXASCIIHEXEDITOR )^);LOAD :@
  77. TBXASCIIHEXEDITOR . LOAD ;STORE :@ TBXASCIIHEXEDITOR . STORE );IMPLEMENTATION PROCEDURE TBXFRAME.HANDLEEVENT
  78. (VAR EVENT:TEVENT);VAR OI1I1O1lll10:TPOINT;BEGIN IF (EVENT.WHAT =EVMOUSEDOWN )AND (STATE AND SFACTIVE <> 0 )THEN
  79. BEGIN MAKELOCAL (EVENT.WHERE , OI1I1O1lll10 );IF (OI1I1O1lll10.Y =0 )THEN BEGIN IF (PWINDOW (OWNER )^. FLAGS AND WFCLOSE
  80. <> 0 )AND (OI1I1O1lll10.X >= 2 )AND (OI1I1O1lll10.X <= 4 )THEN BEGIN IF (EVENT.BUTTONS =MBRIGHTBUTTON )THEN
  81. BEGIN EVENT.WHAT := EVCOMMAND ;EVENT.COMMAND := CMPOPMENU ;EVENT.INFOPTR := OWNER ;PUTEVENT (EVENT );CLEAREVENT (EVENT );
  82. END ;END ;END ;END ;INHERITED HANDLEEVENT(EVENT );END ;CONSTRUCTOR TBXMINMAXBUTTON.INIT (VAR BOUNDS:TRECT);
  83. BEGIN INHERITED INIT(BOUNDS );GROWMODE := GROWMODE OR GFGROWLOX OR GFGROWHIX ;END ;PROCEDURE TBXMINMAXBUTTON.DRAW ;
  84. VAR OO1I:TRECT;BEGIN OWNER ^. GETEXTENT (OO1I );IF (PBXWINDOW (OWNER )^. FLAGS AND WFZOOM <> 0 )THEN BEGIN OO1I.B.Y :=
  85. OO1I.A.Y + 1 ;OO1I.A.X := OO1I.B.X - 8 ;OO1I.B.X := OO1I.A.X + 3 ;END ELSE BEGIN OO1I.B.Y := OO1I.A.Y + 1 ;OO1I.A.X :=
  86. OO1I.B.X - 5 ;OO1I.B.X := OO1I.A.X + 3 ;END ;SETBOUNDS (OO1I );IF (STATE AND SFDRAGGING <> 0 )THEN WRITESTR (0 , 0 ,
  87. '[]', 3 )ELSE BEGIN WRITECHAR (0 , 0 , '[', 2 , 1 );WRITECHAR (1 , 0 , '', 3 , 1 );WRITECHAR (2 , 0 , ']', 2 , 1 );
  88. END ;END ;FUNCTION TBXMINMAXBUTTON.GETPALETTE :PPALETTE ;CONST OO10:STRING [ LENGTH(CMINMAX)] =CMINMAX;BEGIN GETPALETTE
  89. := @ OO10 ;END ;PROCEDURE TBXMINMAXBUTTON.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );IF
  90. (EVENT.WHAT =EVMOUSEDOWN )AND GETSTATE (SFACTIVE )THEN BEGIN EVENT.COMMAND := CMMINIMIZE ;EVENT.WHAT := EVCOMMAND ;
  91. EVENT.INFOPTR := OWNER ;PUTEVENT (EVENT );CLEAREVENT (EVENT );END ;END ;PROCEDURE TBXMINMAXBUTTON.SETSTATE (ASTATE:WORD;
  92. ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE AND (SFACTIVE OR SFDRAGGING )<> 0 )THEN DRAWVIEW ;
  93. END ;CONSTRUCTOR TBXICON.INIT (ATITLE:TTITLESTR);VAR OO1I:TRECT;OOIO:WORD;OOIl:WORD;OO10:WORD;OO1l:STRING ;BEGIN IF
  94. (ATITLE [ 1 ] =^C )THEN OO1l := COPY (ATITLE , 2 , LENGTH (ATITLE ))ELSE OO1l := ATITLE ;OO10 := POS (^M , OO1l );OOIO :=
  95. 0 ;OOIl := 0 ;WHILE (OO10 <> 0 ) DO BEGIN INC (OOIl );IF (OO10 - 1 > OOIO )THEN OOIO := OO10 - 1 ;OO1l := COPY (OO1l ,
  96. OO10 + 1 , LENGTH (OO1l ));OO10 := POS (^M , OO1l );END ;IF (OO1l <> '')THEN BEGIN INC (OOIl );IF (LENGTH (OO1l )> OOIO
  97. )THEN OOIO := LENGTH (OO1l );END ;DESKTOP ^. GETEXTENT (OO1I );INC (OO1I.A.X , 2 );DEC (OO1I.B.Y , 1 );OO1I.A.Y :=
  98. OO1I.B.Y - OOIl ;OO1I.B.X := OO1I.A.X + OOIO ;INHERITED INIT(OO1I );TITLE := NEWSTR (ATITLE );OPTIONS := OPTIONS OR
  99. OFSELECTABLE OR OFTOPSELECT ;END ;CONSTRUCTOR TBXICON.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );TITLE := S.READSTR ;
  100. END ;DESTRUCTOR TBXICON.DONE ;BEGIN DISPOSESTR (TITLE );INHERITED DONE;END ;PROCEDURE TBXICON.DRAW ;
  101. VAR OIO1:TDRAWBUFFER;OOllOI000O1l:WORD;OO10:WORD;OOIl:WORD;OOIO:WORD;OOlIll0I1ll1:BOOLEAN;OO1l:STRING ;OO1O:STRING ;
  102. BEGIN IF STATE AND SFDRAGGING <> 0 THEN OOllOI000O1l := 3 ELSE IF STATE AND SFSELECTED =0 THEN OOllOI000O1l := 1 ELSE
  103. OOllOI000O1l := 2 ;OOllOI000O1l := GETCOLOR (OOllOI000O1l );OOlIll0I1ll1 := (TITLE ^[ 1 ] =^C );IF OOlIll0I1ll1 THEN OO1l
  104. := COPY (TITLE ^, 2 , LENGTH (TITLE ^))ELSE OO1l := TITLE ^;OO10 := POS (^M , OO1l );OOIl := 0 ;WHILE (OO10 <> 0
  105. ) DO BEGIN MOVECHAR (OIO1 , ' ', OOllOI000O1l , SIZE.X );OO1O := COPY (OO1l , 1 , OO10 - 1 );IF OOlIll0I1ll1 THEN OOIO :=
  106. ((SIZE.X - LENGTH (OO1O ))SHR 1 )ELSE OOIO := 0 ;MOVESTR (OIO1 [ OOIO ] , OO1O , OOllOI000O1l );WRITELINE (0 , OOIl ,
  107. SIZE.X , 1 , OIO1 );INC (OOIl );OO1l := COPY (OO1l , OO10 + 1 , LENGTH (OO1l ));OO10 := POS (^M , OO1l );END ;IF (OO1l <>
  108. '')THEN BEGIN MOVECHAR (OIO1 , ' ', OOllOI000O1l , SIZE.X );IF OOlIll0I1ll1 THEN OOIO := ((SIZE.X - LENGTH (OO1l ))SHR 1
  109. )ELSE OOIO := 0 ;MOVESTR (OIO1 [ OOIO ] , OO1l , OOllOI000O1l );WRITELINE (0 , OOIl , SIZE.X , 1 , OIO1 );END ;END ;
  110. FUNCTION TBXICON.GETPALETTE :PPALETTE ;CONST OOllO111IOI1:STRING [ LENGTH(CGRAYWINDOW)] =CGRAYWINDOW;BEGIN GETPALETTE :=
  111. @ OOllO111IOI1 ;END ;PROCEDURE TBXICON.HANDLEEVENT (VAR EVENT:TEVENT);VAR OIOO00Ol111:TRECT;
  112. BEGIN INHERITED HANDLEEVENT(EVENT );CASE EVENT.WHAT  OF EVCOMMAND :CASE EVENT.COMMAND  OF CMRESIZE :BEGIN OWNER ^.
  113. GETEXTENT (OIOO00Ol111 );DRAGVIEW (EVENT , DMDRAGMOVE , OIOO00Ol111 , SIZE , SIZE );CLEAREVENT (EVENT );END ;END ;
  114. EVMOUSEDOWN :BEGIN OWNER ^. GETEXTENT (OIOO00Ol111 );DRAGVIEW (EVENT , DMDRAGMOVE , OIOO00Ol111 , SIZE , SIZE );
  115. CLEAREVENT (EVENT );END ;END ;END ;PROCEDURE TBXICON.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);
  116. BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE AND (SFSELECTED OR SFFOCUSED )<> 0 )OR (ASTATE AND (SFACTIVE OR
  117. SFDRAGGING )<> 0 )THEN DRAWVIEW ;END ;PROCEDURE TBXICON.SIZELIMITS (VAR MIN,MAX:TPOINT);BEGIN MIN.X := SIZE.X ;MIN.Y :=
  118. SIZE.Y ;MAX.X := SIZE.X ;MAX.Y := SIZE.Y ;END ;PROCEDURE TBXICON.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );
  119. S.WRITESTR (TITLE );END ;CONSTRUCTOR TBXWINDOWICON.INIT (ATITLE:TTITLESTR;AVIEW:PVIEW);BEGIN INHERITED INIT(ATITLE );
  120. VIEW := AVIEW ;END ;CONSTRUCTOR TBXWINDOWICON.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );GETPEERVIEWPTR (S , VIEW );
  121. END ;PROCEDURE TBXWINDOWICON.CONTROLMENU (MOUSE:BOOLEAN);VAR OO1I:TRECT;OO10:PMENUBOX;OIOO0l010lO:TEVENT;BEGIN IF MOUSE
  122. THEN OO1I.ASSIGN (0 , 0 , 14 , 12 )ELSE OO1I.ASSIGN (ORIGIN.X , ORIGIN.Y , ORIGIN.X + 14 , ORIGIN.Y + 11 );OO10 := NEW
  123. (PMENUBOX , INIT (OO1I , NEWMENU (NEWITEM ('~C~lose', '', KBNOKEY , CMCLOSE , HCNOCONTEXT , NEWITEM ('~M~aximize', '',
  124. KBNOKEY , CMMAXIMIZE , HCNOCONTEXT , NEWITEM ('~P~revious', '', KBNOKEY , CMPREV , HCNOCONTEXT , NEWITEM ('~N~ext', '',
  125. KBNOKEY , CMNEXT , HCNOCONTEXT , NEWITEM ('Mo~v~e', '', KBNOKEY , CMRESIZE , HCNOCONTEXT , NIL )))))), NIL ));IF MOUSE
  126. THEN OIOO0l010lO.COMMAND := MOUSEPOPUPMENU (OO10 )ELSE OIOO0l010lO.COMMAND := POPUPMENU (OO10 );DISPOSEMENU (OO10 ^. MENU
  127. );DISPOSE (OO10 );IF (OIOO0l010lO.COMMAND <> 0 )THEN BEGIN OIOO0l010lO.WHAT := EVCOMMAND ;OIOO0l010lO.INFOPTR := @ SELF ;
  128. PUTEVENT (OIOO0l010lO );END ;END ;PROCEDURE TBXWINDOWICON.HANDLEEVENT (VAR EVENT:TEVENT);VAR OO1I:TRECT;
  129. BEGIN CASE EVENT.WHAT  OF EVKEYDOWN :CASE EVENT.KEYCODE  OF KBALTMINUS :BEGIN CONTROLMENU (FALSE );CLEAREVENT (EVENT );
  130. END ;END ;EVCOMMAND :CASE EVENT.COMMAND  OF CMMAXIMIZE :BEGIN VIEW ^. SHOW ;VIEW ^. SELECT ;HIDE ;CLEAREVENT (EVENT );
  131. END ;CMCLOSE :BEGIN IF (EVENT.INFOPTR =NIL )OR (EVENT.INFOPTR =@ SELF )THEN MESSAGE (VIEW , EVCOMMAND , CMCLOSE , @ SELF
  132. );IF (EVENT.INFOPTR =NIL )OR (EVENT.INFOPTR =@ SELF )OR (EVENT.INFOPTR =VIEW )THEN BEGIN FREE ;CLEAREVENT (EVENT );END ;
  133. END ;END ;EVMOUSEDOWN :BEGIN IF EVENT.DOUBLE THEN BEGIN VIEW ^. SHOW ;VIEW ^. SELECT ;HIDE ;CLEAREVENT (EVENT );END ELSE
  134. IF (EVENT.BUTTONS =MBRIGHTBUTTON )THEN BEGIN CONTROLMENU (TRUE );CLEAREVENT (EVENT );END END ;END ;
  135. INHERITED HANDLEEVENT(EVENT );END ;PROCEDURE TBXWINDOWICON.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);VAR OIOI:TCOMMANDSET;
  136. BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE AND SFSELECTED <> 0 )THEN ENABLECOMMANDS ([ CMCLOSE , CMMINIMIZE ,
  137. CMRESIZE , CMNEXT , CMPREV ] );END ;PROCEDURE TBXWINDOWICON.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );
  138. PUTPEERVIEWPTR (S , VIEW );END ;CONSTRUCTOR TBXWINDOW.INIT (VAR BOUNDS:TRECT;ATITLE:TTITLESTR;ANUMBER:INTEGER);
  139. VAR OO1I:TRECT;OIll00l10I0:TPOINT;BEGIN INHERITED INIT(BOUNDS , ATITLE , WNNONUMBER );GETEXTENT (OO1I );OO1I.B.Y :=
  140. OO1I.A.Y + 1 ;OO1I.A.X := OO1I.B.X - 8 ;OO1I.B.X := OO1I.A.X + 3 ;MINMAX := NEW (PBXMINMAXBUTTON , INIT (OO1I ));INSERT
  141. (MINMAX );INITICON ;IF (ICON <> NIL )THEN BEGIN ICON ^. SETSTATE (SFVISIBLE , FALSE );DESKTOP ^. INSERT (ICON );END ;
  142. END ;CONSTRUCTOR TBXWINDOW.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );GETSUBVIEWPTR (S , MINMAX );GETPEERVIEWPTR (S ,
  143. ICON );END ;PROCEDURE TBXWINDOW.CONTROLMENU (MOUSE:BOOLEAN);VAR OO1I:TRECT;OO10:PMENUBOX;OIOO0l010lO:TEVENT;BEGIN IF
  144. MOUSE THEN OO1I.ASSIGN (0 , 0 , 14 , 12 )ELSE OO1I.ASSIGN (ORIGIN.X , ORIGIN.Y , ORIGIN.X + 14 , ORIGIN.Y + 11 );OO10 :=
  145. NEW (PMENUBOX , INIT (OO1I , NEWMENU (NEWITEM ('~C~lose', '', KBNOKEY , CMCLOSE , HCNOCONTEXT , NEWITEM ('~Z~oom', '',
  146. KBNOKEY , CMZOOM , HCNOCONTEXT , NEWITEM ('~M~inimize', '', KBNOKEY , CMMINIMIZE , HCNOCONTEXT , NEWITEM ('~P~revious',
  147. '', KBNOKEY , CMPREV , HCNOCONTEXT , NEWITEM ('~N~ext', '', KBNOKEY , CMNEXT , HCNOCONTEXT , NEWITEM ('~R~esize/move',
  148. '', KBNOKEY , CMRESIZE , HCNOCONTEXT , NEWITEM ('~T~ile', '', KBNOKEY , CMTILE , HCNOCONTEXT , NEWITEM ('C~a~scade', '',
  149. KBNOKEY , CMCASCADE , HCNOCONTEXT , NIL ))))))))), NIL ));IF MOUSE THEN OIOO0l010lO.COMMAND := MOUSEPOPUPMENU (OO10 )ELSE
  150. OIOO0l010lO.COMMAND := POPUPMENU (OO10 );DISPOSEMENU (OO10 ^. MENU );DISPOSE (OO10 );IF (OIOO0l010lO.COMMAND <> 0 )THEN
  151. BEGIN OIOO0l010lO.WHAT := EVCOMMAND ;OIOO0l010lO.INFOPTR := @ SELF ;PUTEVENT (OIOO0l010lO );END ;END ;
  152. PROCEDURE TBXWINDOW.HANDLEEVENT (VAR EVENT:TEVENT);VAR OO1I:TRECT;BEGIN CASE EVENT.WHAT  OF EVKEYDOWN :CASE EVENT.KEYCODE
  153.  OF KBALTMINUS :BEGIN CONTROLMENU (FALSE );CLEAREVENT (EVENT );END ;END ;EVCOMMAND :CASE EVENT.COMMAND  OF CMMINIMIZE
  154. :BEGIN IF (ICON <> NIL )THEN BEGIN ICON ^. SHOW ;ICON ^. SELECT ;HIDE ;END ;CLEAREVENT (EVENT );END ;CMCLOSE :BEGIN IF
  155. (ICON <> NIL )THEN BEGIN IF (EVENT.INFOPTR =NIL )OR (EVENT.INFOPTR =@ SELF )THEN MESSAGE (ICON , EVCOMMAND , CMCLOSE , @
  156. SELF )ELSE IF (EVENT.INFOPTR =ICON )THEN EVENT.INFOPTR := @ SELF ;END ;END ;CMPOPMENU :BEGIN CONTROLMENU (TRUE );
  157. CLEAREVENT (EVENT );END ;END ;END ;INHERITED HANDLEEVENT(EVENT );END ;PROCEDURE TBXWINDOW.INITFRAME ;VAR OO1I:TRECT;
  158. BEGIN GETEXTENT (OO1I );FRAME := NEW (PBXFRAME , INIT (OO1I ));END ;PROCEDURE TBXWINDOW.INITICON ;VAR OO1I:TRECT;
  159. BEGIN ICON := NEW (PBXWINDOWICON , INIT (TITLE ^, @ SELF ));END ;PROCEDURE TBXWINDOW.SETSTATE (ASTATE:WORD;
  160. ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE =SFACTIVE )THEN CASE ENABLE  OF TRUE :MINMAX ^.
  161. SHOW ;FALSE :MINMAX ^. HIDE ;END ;IF (ASTATE AND SFSELECTED <> 0 )THEN ENABLECOMMANDS ([ CMMINIMIZE ] );END ;
  162. PROCEDURE TBXWINDOW.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );PUTSUBVIEWPTR (S , MINMAX );PUTPEERVIEWPTR (S , ICON
  163. );END ;CONSTRUCTOR TBXTEXTWINDOW.INIT (BOUNDS:TRECT;WINTITLE:STRING ;WINNUMBER:WORD;AOPTIONS:WORD;AMAXLINES:WORD);
  164. VAR OO1I:TRECT;BEGIN TBXWINDOW.INIT (BOUNDS , WINTITLE , WINNUMBER );HSCROLLBAR := NIL ;VSCROLLBAR := NIL ;DESKTOP ^.
  165. GETEXTENT (OO1I );WIDTH := OO1I.B.X ;HEIGHT := AMAXLINES ;IF (HEIGHT =0 )THEN HEIGHT := OO1I.B.Y ;IF ((AOPTIONS AND
  166. OFHSCROLLBAR )<> 0 )THEN BEGIN HSCROLLBAR := STANDARDSCROLLBAR (SBHORIZONTAL + SBHANDLEKEYBOARD );INSERT (HSCROLLBAR );
  167. END ;IF ((AOPTIONS AND OFVSCROLLBAR )<> 0 )THEN BEGIN VSCROLLBAR := STANDARDSCROLLBAR (SBVERTICAL + SBHANDLEKEYBOARD );
  168. INSERT (VSCROLLBAR );END ;GETEXTENT (BOUNDS );BOUNDS.GROW (- 1 , - 1 );INTERIOR := NEW (PTERMINAL , INIT (BOUNDS ,
  169. HSCROLLBAR , VSCROLLBAR , WIDTH * HEIGHT ));INSERT (INTERIOR );END ;CONSTRUCTOR TBXTEXTWINDOW.LOAD (VAR S:TSTREAM);
  170. BEGIN INHERITED LOAD(S );GETSUBVIEWPTR (S , INTERIOR );GETSUBVIEWPTR (S , HSCROLLBAR );GETSUBVIEWPTR (S , VSCROLLBAR );
  171. S.READ (WIDTH , SIZEOF (BYTE ));S.READ (HEIGHT , SIZEOF (BYTE ));END ;PROCEDURE TBXTEXTWINDOW.CLEAR ;BEGIN INTERIOR ^.
  172. QUEFRONT := 0 ;INTERIOR ^. QUEBACK := 0 ;INTERIOR ^. SETLIMIT (0 , 1 );INTERIOR ^. SETCURSOR (0 , 0 );INTERIOR ^.
  173. SHOWCURSOR ;INTERIOR ^. DRAWVIEW ;END ;PROCEDURE TBXTEXTWINDOW.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN IF (EVENT.WHAT
  174. =EVBROADCAST )THEN CASE EVENT.COMMAND  OF CMDISPLAYSTR :WRITE (PSTRING (EVENT.INFOPTR )^);CMDISPLAYCLR :CLEAR ;END ;
  175. INHERITED HANDLEEVENT(EVENT );END ;PROCEDURE TBXTEXTWINDOW.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );PUTSUBVIEWPTR
  176. (S , INTERIOR );PUTSUBVIEWPTR (S , HSCROLLBAR );GETSUBVIEWPTR (S , VSCROLLBAR );S.WRITE (WIDTH , SIZEOF (BYTE ));S.WRITE
  177. (HEIGHT , SIZEOF (BYTE ));END ;PROCEDURE TBXTEXTWINDOW.WRITE (ST:STRING );VAR OO1l:TEXTBUF;OOIO:BYTE;OIlO:BYTE;
  178. BEGIN OIlO := 0 ;REPEAT OOIO := 0 ;WHILE (OOIO < SIZEOF (TEXTBUF )- 2 )AND (OOIO < WIDTH )AND (OIlO < BYTE (ST [ 0 ]
  179. )) DO BEGIN INC (OIlO );OO1l [ OOIO ] := ST [ OIlO ] ;INC (OOIO );END ;OO1l [ OOIO ] := #13;INC (OOIO );OO1l [ OOIO ] :=
  180. #10;INC (OOIO );INTERIOR ^. STRWRITE (OO1l , OOIO );UNTIL (OIlO >= BYTE (ST [ 0 ] ));END ;
  181. CONSTRUCTOR TBXFORMATTEDTEXTSCROLLER.INIT (VAR BOUNDS:TRECT;AVSCROLLBAR:PSCROLLBAR;BUFF:PBXCHARARRAY;BUFFSIZE:WORD);
  182. BEGIN INHERITED INIT(BOUNDS , NIL , AVSCROLLBAR );BUF := BUFF ;BUFSIZE := BUFFSIZE ;GROWMODE := GFGROWHIX OR GFGROWHIY ;
  183. COUNTLINES ;END ;CONSTRUCTOR TBXFORMATTEDTEXTSCROLLER.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );BUF := NIL ;BUFSIZE
  184. := 0 ;END ;PROCEDURE TBXFORMATTEDTEXTSCROLLER.CHANGEBOUNDS (VAR BOUNDS:TRECT);BEGIN TSCROLLER.CHANGEBOUNDS (BOUNDS );
  185. COUNTLINES ;END ;PROCEDURE TBXFORMATTEDTEXTSCROLLER.COUNTLINES ;VAR OIlI1lll10I:WORD;OIOO101OlII:WORD;OI1OI00OlOI:WORD;
  186. OOIl:WORD;BEGIN OOIl := 1 ;OIlI1lll10I := 0 ;WHILE (OIlI1lll10I < BUFSIZE ) DO BEGIN GETNEXTLINE (OIlI1lll10I ,
  187. OIOO101OlII , OI1OI00OlOI );OIlI1lll10I := OI1OI00OlOI ;INC (OOIl );END ;IF OOIl <> LIMIT.Y THEN SETLIMIT (SIZE.X , OOIl
  188. );END ;FUNCTION TBXFORMATTEDTEXTSCROLLER.DATASIZE :WORD ;BEGIN DATASIZE := SIZEOF (TBXBUFDATA );END ;
  189. PROCEDURE TBXFORMATTEDTEXTSCROLLER.DRAW ;VAR OIlI1lll10I:WORD;OIOO101OlII:WORD;OI1OI00OlOI:WORD;OOIl:WORD;
  190. OIO1:TDRAWBUFFER;OOllOI000O1l:BYTE;BEGIN OOllOI000O1l := GETCOLOR (1 );OIlI1lll10I := 0 ;OOIl := 0 ;WHILE (OOIl < DELTA.Y
  191. - 1 ) DO BEGIN GETNEXTLINE (OIlI1lll10I , OIOO101OlII , OI1OI00OlOI );OIlI1lll10I := OI1OI00OlOI ;INC (OOIl );END ;OOIl
  192. := 0 ;WHILE (OOIl < SIZE.Y ) DO BEGIN MOVECHAR (OIO1 , ' ', OOllOI000O1l , SIZE.X );GETNEXTLINE (OIlI1lll10I ,
  193. OIOO101OlII , OI1OI00OlOI );MOVEBUF (OIO1 , BUF ^[ OIlI1lll10I ] , OOllOI000O1l , OIOO101OlII );WRITELINE (0 , OOIl ,
  194. SIZE.X , 1 , OIO1 );OIlI1lll10I := OI1OI00OlOI ;INC (OOIl );END ;END ;PROCEDURE TBXFORMATTEDTEXTSCROLLER.GETDATA
  195. (VAR REC);BEGIN WITH TBXBUFDATA(REC) DO BEGIN DATA := BUF ;DATASIZE := BUFSIZE ;END ;END ;
  196. PROCEDURE TBXFORMATTEDTEXTSCROLLER.GETNEXTLINE (FIRST:WORD;VAR COUNT:WORD;VAR NEXTCH:WORD);VAR OIlO:WORD;BEGIN COUNT := 0
  197. ;IF (FIRST >= BUFSIZE )THEN EXIT ;OIlO := FIRST ;IF (FIRST + SIZE.X > BUFSIZE )THEN NEXTCH := BUFSIZE ELSE NEXTCH :=
  198. FIRST + SIZE.X ;WHILE (OIlO < NEXTCH )AND (BUF ^[ OIlO ] <> #13) DO INC (OIlO );IF (BUF ^[ OIlO ] =#13)THEN BEGIN NEXTCH
  199. := OIlO ;IF (NEXTCH < BUFSIZE )AND (BUF ^[ NEXTCH + 1 ] =#10)THEN INC (NEXTCH );END ELSE BEGIN WHILE (OIlO > FIRST )AND
  200. (BUF ^[ OIlO ] <> ' ') DO DEC (OIlO );IF (OIlO =FIRST )THEN OIlO := NEXTCH ELSE NEXTCH := OIlO ;END ;IF (NEXTCH < BUFSIZE
  201. )THEN INC (NEXTCH );COUNT := OIlO - FIRST ;END ;PROCEDURE TBXFORMATTEDTEXTSCROLLER.SETDATA (VAR REC);
  202. BEGIN WITH TBXBUFDATA(REC) DO BEGIN BUF := DATA ;BUFSIZE := DATASIZE ;END ;SCROLLTO (0 , 0 );COUNTLINES ;END ;
  203. CONSTRUCTOR TBXPOSINDICATOR.INIT (VAR BOUNDS:TRECT);BEGIN INHERITED INIT(BOUNDS );GROWMODE := GFGROWLOY OR GFGROWHIY ;
  204. POS := 1 ;END ;CONSTRUCTOR TBXPOSINDICATOR.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );S.READ (POS , SIZEOF (LONGINT
  205. ));END ;FUNCTION TBXPOSINDICATOR.DATASIZE :WORD ;BEGIN DATASIZE := SIZEOF (LONGINT );END ;PROCEDURE TBXPOSINDICATOR.DRAW
  206. ;VAR OOllOI000O1l:WORD;OI111IlIO1II:CHAR;OIOI1l01I01:STRING [ 12 ] ;OIO1:TDRAWBUFFER;BEGIN IF (STATE AND SFDRAGGING =0
  207. )THEN BEGIN OOllOI000O1l := GETCOLOR (1 );OI111IlIO1II := #205;END ELSE BEGIN OOllOI000O1l := GETCOLOR (2 );OI111IlIO1II
  208. := #196;END ;STR (POS , OIOI1l01I01 );MOVECHAR (OIO1 , OI111IlIO1II , OOllOI000O1l , SIZE.X );MOVESTR (OIO1 , ' Pos : '+
  209. OIOI1l01I01 + ' ', OOllOI000O1l );WRITEBUF (0 , 0 , SIZE.X , 1 , OIO1 );END ;PROCEDURE TBXPOSINDICATOR.GETDATA (VAR REC);
  210. BEGIN LONGINT (REC ):= POS ;END ;FUNCTION TBXPOSINDICATOR.GETPALETTE :PPALETTE ;CONST OO10:STRING [
  211. LENGTH(CPOSINDICATOR)] =CPOSINDICATOR;BEGIN GETPALETTE := @ OO10 ;END ;PROCEDURE TBXPOSINDICATOR.SETDATA (VAR REC);
  212. BEGIN IF (POS <> LONGINT (REC ))THEN BEGIN POS := LONGINT (REC );DRAWVIEW ;END ;END ;PROCEDURE TBXPOSINDICATOR.SETSTATE
  213. (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE =SFDRAGGING )THEN DRAWVIEW ;END ;
  214. PROCEDURE TBXPOSINDICATOR.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );S.WRITE (POS , SIZEOF (LONGINT ));END ;
  215. DESTRUCTOR TBXMULTISCROLLBAR.DONE ;BEGIN INHERITED SETSTATE(SFVISIBLE , FALSE );INHERITED DONE;END ;
  216. PROCEDURE TBXMULTISCROLLBAR.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN IF (ASTATE =SFVISIBLE )AND NOT ENABLE THEN EXIT ;
  217. INHERITED SETSTATE(ASTATE , ENABLE );END ;CONSTRUCTOR TBXEDITBUFF.INIT (BOUNDS:TRECT;BUFF:POINTER;BUFFSIZE:WORD;
  218. ITEMWIDTH:BYTE;AVSCROLLBAR:PSCROLLBAR);VAR O10OIO0I0111l:WORD;BEGIN INHERITED INIT(BOUNDS , NIL , AVSCROLLBAR );OPTIONS
  219. := OPTIONS OR OFFRAMED ;BUF := BUFF ;BUFSIZE := BUFFSIZE ;ITEMSIZE := ITEMWIDTH ;SHOWCURSOR ;BLOCKCURSOR ;O10OIO0I0111l
  220. := (BUFSIZE * ITEMSIZE )DIV SIZE.X ;IF ((BUFSIZE * ITEMSIZE )MOD SIZE.X <> 0 )THEN INC (O10OIO0I0111l );SETLIMIT (SIZE.X
  221. , O10OIO0I0111l );END ;CONSTRUCTOR TBXEDITBUFF.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );S.READ (ITEMSIZE , SIZEOF
  222. (BYTE ));BUF := NIL ;BUFSIZE := 0 ;END ;FUNCTION TBXEDITBUFF.DATASIZE :WORD ;BEGIN DATASIZE := SIZEOF (TBXBUFDATA );
  223. END ;PROCEDURE TBXEDITBUFF.GETDATA (VAR REC);BEGIN WITH TBXBUFDATA(REC) DO BEGIN DATA := BUF ;DATASIZE := BUFSIZE ;END ;
  224. END ;FUNCTION TBXEDITBUFF.GETOFFSET :WORD ;BEGIN GETOFFSET := WORD ((LONGINT (DELTA.Y * SIZE.X )+ LONGINT (CURSOR.Y *
  225. SIZE.X )+ CURSOR.X )DIV ITEMSIZE );END ;PROCEDURE TBXEDITBUFF.GETXY (VAR POS:TPOINT);BEGIN POS.X := CURSOR.X DIV ITEMSIZE
  226. ;POS.Y := CURSOR.Y ;END ;PROCEDURE TBXEDITBUFF.HANDLEEVENT (VAR EVENT:TEVENT);VAR OIOllI0O1OI:TPOINT;OOIl:INTEGER;
  227. BEGIN CASE EVENT.WHAT  OF EVBROADCAST :BEGIN CASE EVENT.COMMAND  OF CMSCROLLBARCHANGED :BEGIN IF (VSCROLLBAR ^. VALUE <>
  228. DELTA.Y )THEN BEGIN OIOllI0O1OI := CURSOR ;INHERITED HANDLEEVENT(EVENT );SETCURSOR (OIOllI0O1OI.X , OIOllI0O1OI.Y );
  229. MESSAGE (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;END ;END ;END ;EVKEYDOWN :BEGIN CASE EVENT.KEYCODE  OF KBUP
  230. :BEGIN OOIl := CURSOR.Y - 1 ;IF (OOIl < 0 )THEN SCROLLTO (0 , DELTA.Y - 1 )ELSE SETCURSOR (CURSOR.X , OOIl );MESSAGE
  231. (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBPGUP :BEGIN IF (DELTA.Y - SIZE.Y >= 0 )THEN BEGIN SCROLLTO (0 ,
  232. DELTA.Y - SIZE.Y );END ELSE BEGIN SCROLLTO (0 , 0 );SETCURSOR (CURSOR.X , 0 );END ;MESSAGE (OWNER , EVBROADCAST ,
  233. CMCURSORMOVED , @ SELF );END ;KBLEFT :BEGIN IF (CURSOR.X > 0 )THEN BEGIN SETCURSOR (CURSOR.X - 1 , CURSOR.Y );END ELSE IF
  234. (CURSOR.Y > 0 )THEN BEGIN SETCURSOR (SIZE.X - 1 , CURSOR.Y - 1 );END ELSE IF (DELTA.Y > 0 )THEN BEGIN SCROLLTO (0 ,
  235. DELTA.Y - 1 );SETCURSOR (SIZE.X - 1 , 0 );END ;MESSAGE (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBRIGHT
  236. :BEGIN IF (CURSOR.X + 1 < SIZE.X )THEN BEGIN SETCURSOR (CURSOR.X + 1 , CURSOR.Y );END ELSE IF (CURSOR.Y + 1 < SIZE.Y
  237. )THEN BEGIN SETCURSOR (0 , CURSOR.Y + 1 );END ELSE IF (DELTA.Y + SIZE.Y < LIMIT.Y )THEN BEGIN SCROLLTO (0 , DELTA.Y + 1
  238. );SETCURSOR (0 , SIZE.Y - 1 );END ;MESSAGE (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBDOWN :BEGIN OOIl :=
  239. CURSOR.Y + 1 ;IF (OOIl =SIZE.Y )THEN SCROLLTO (0 , DELTA.Y + 1 )ELSE SETCURSOR (CURSOR.X , OOIl );MESSAGE (OWNER ,
  240. EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBPGDN :BEGIN IF (DELTA.Y + SIZE.Y < LIMIT.Y )THEN BEGIN SCROLLTO (0 ,
  241. DELTA.Y + SIZE.Y );END ELSE BEGIN SCROLLTO (0 , LIMIT.Y );SETCURSOR (CURSOR.X , SIZE.Y - 1 );END ;MESSAGE (OWNER ,
  242. EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBCTRLPGDN :BEGIN SCROLLTO (0 , LIMIT.Y );SETCURSOR (SIZE.X - 1 , SIZE.Y - 1
  243. );MESSAGE (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;KBCTRLPGUP :BEGIN SCROLLTO (0 , 0 );SETCURSOR (0 , 0 );
  244. MESSAGE (OWNER , EVBROADCAST , CMCURSORMOVED , @ SELF );END ;END ;END ;EVMOUSEDOWN :BEGIN IF MOUSEINVIEW (EVENT.WHERE
  245. )THEN BEGIN MAKELOCAL (EVENT.WHERE , OIOllI0O1OI );SETCURSOR (OIOllI0O1OI.X , OIOllI0O1OI.Y );MESSAGE (OWNER ,
  246. EVBROADCAST , CMCURSORMOVED , @ SELF );END ;END ;END ;INHERITED HANDLEEVENT(EVENT );END ;PROCEDURE TBXEDITBUFF.SETXY
  247. (POS:TPOINT);BEGIN SETCURSOR (POS.X * ITEMSIZE , POS.Y );END ;PROCEDURE TBXEDITBUFF.SETDATA (VAR REC);
  248. VAR O10OIO0I0111l:WORD;BEGIN WITH TBXBUFDATA(REC) DO BEGIN BUF := DATA ;BUFSIZE := DATASIZE ;O10OIO0I0111l := (BUFSIZE *
  249. ITEMSIZE )DIV SIZE.X ;END ;IF ((BUFSIZE * ITEMSIZE )MOD SIZE.X <> 0 )THEN INC (O10OIO0I0111l );SETLIMIT (SIZE.X ,
  250. O10OIO0I0111l );SCROLLTO (0 , 0 );END ;PROCEDURE TBXEDITBUFF.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );S.WRITE
  251. (ITEMSIZE , SIZEOF (BYTE ));END ;CONSTRUCTOR TBXASCIIBUFF.INIT (BOUNDS:TRECT;BUFF:POINTER;BUFFSIZE:WORD;
  252. AVSCROLLBAR:PSCROLLBAR);BEGIN INHERITED INIT(BOUNDS , BUFF , BUFFSIZE , 1 , AVSCROLLBAR );END ;
  253. PROCEDURE TBXASCIIBUFF.HANDLEEVENT (VAR EVENT:TEVENT);VAR OOIO:WORD;BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT
  254. =EVKEYDOWN )THEN BEGIN CASE EVENT.CHARCODE  OF #1.. #8, #10.. #255:BEGIN OOIO := GETOFFSET ;IF (OOIO < BUFSIZE )THEN
  255. BEGIN BUF ^[ OOIO ] := BYTE (EVENT.CHARCODE );MESSAGE (OWNER , EVBROADCAST , CMUPDATEVIEW , @ SELF );MESSAGE (OWNER ,
  256. EVBROADCAST , CMEDITVIEW , @ SELF );MESSAGE (OWNER , EVKEYDOWN , KBRIGHT , @ SELF );CLEAREVENT (EVENT );END ;END ;END ;
  257. END ;END ;PROCEDURE TBXASCIIBUFF.DRAW ;VAR OOllOI000O1l:BYTE;OIlO:WORD;OIll:WORD;OIlI1lll10I:WORD;OIlI1OIllI1:WORD;
  258. OIO1:ARRAY [ 1 .. 4096 ]  OF BYTE;BEGIN OOllOI000O1l := GETCOLOR (1 );OIlI1lll10I := DELTA.Y * SIZE.X ;OIlI1OIllI1 :=
  259. OIlI1lll10I + (SIZE.Y * SIZE.X )- 1 ;IF (OIlI1OIllI1 >= BUFSIZE )THEN OIlI1OIllI1 := BUFSIZE - 1 ;MOVECHAR (OIO1 , '.',
  260. OOllOI000O1l , (SIZE.Y * SIZE.X ));OIll := 1 ;FOR OIlO := OIlI1lll10I TO OIlI1OIllI1  DO BEGIN OIO1 [ OIll ] := BUF ^[
  261. OIlO ] ;INC (OIll );INC (OIll );END ;WRITEBUF (0 , 0 , SIZE.X , SIZE.Y , OIO1 );END ;CONSTRUCTOR TBXHEXBUFF.INIT
  262. (BOUNDS:TRECT;BUFF:POINTER;BUFFSIZE:WORD;AVSCROLLBAR:PSCROLLBAR);BEGIN INHERITED INIT(BOUNDS , BUFF , BUFFSIZE , 2 ,
  263. AVSCROLLBAR );END ;PROCEDURE TBXHEXBUFF.DRAW ;CONST OOIOOOI11OI1:ARRAY [ 0 .. $F ]  OF CHAR='0123456789ABCDEF';
  264. VAR OOllOI000O1l:BYTE;OIlO:WORD;OIll:WORD;OIlI1lll10I:WORD;OIlI1OIllI1:WORD;OIO1:ARRAY [ 1 .. 4096 ]  OF BYTE;
  265. OIlIl0l11OO:WORD;BEGIN OIlIl0l11OO := SIZE.X DIV 2 ;OOllOI000O1l := GETCOLOR (1 );OIlI1lll10I := DELTA.Y * OIlIl0l11OO ;
  266. OIlI1OIllI1 := OIlI1lll10I + (SIZE.Y * OIlIl0l11OO )- 1 ;IF (OIlI1OIllI1 >= BUFSIZE )THEN OIlI1OIllI1 := BUFSIZE - 1 ;
  267. MOVECHAR (OIO1 , '.', OOllOI000O1l , (SIZE.Y * SIZE.X ));OIll := 1 ;FOR OIlO := OIlI1lll10I TO OIlI1OIllI1  DO BEGIN OIO1
  268. [ OIll ] := BYTE (OOIOOOI11OI1 [ BUF ^[ OIlO ] SHR 4 ] );INC (OIll );INC (OIll );OIO1 [ OIll ] := BYTE (OOIOOOI11OI1 [
  269. BUF ^[ OIlO ] AND $F ] );INC (OIll );INC (OIll );END ;WRITEBUF (0 , 0 , SIZE.X , SIZE.Y , OIO1 );END ;
  270. PROCEDURE TBXHEXBUFF.HANDLEEVENT (VAR EVENT:TEVENT);VAR OIlO:BYTE;OIOI:INTEGER;OOIO:WORD;
  271. BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVKEYDOWN )THEN BEGIN CASE EVENT.CHARCODE  OF '0'.. '9', 'a'.. 'f',
  272. 'A'.. 'F':BEGIN OOIO := GETOFFSET ;IF (OOIO < BUFSIZE )THEN BEGIN VAL ('$'+ EVENT.CHARCODE , OIlO , OIOI );IF ((CURSOR.X
  273. MOD 2 )=0 )THEN BUF ^[ OOIO ] := (BUF ^[ OOIO ] AND $0F )OR (OIlO SHL 4 )ELSE BUF ^[ OOIO ] := (BUF ^[ OOIO ] AND $F0 )OR
  274. OIlO ;MESSAGE (OWNER , EVBROADCAST , CMUPDATEVIEW , @ SELF );MESSAGE (OWNER , EVBROADCAST , CMEDITVIEW , @ SELF );
  275. MESSAGE (OWNER , EVKEYDOWN , KBRIGHT , @ SELF );CLEAREVENT (EVENT );END ;END ;END ;END ;END ;
  276. CONSTRUCTOR TBXASCIIHEXEDITOR.INIT (BOUNDS:TRECT;ATITLE:TTITLESTR;ANUMBER:INTEGER;AOPTIONS:WORD;BUFF:POINTER;
  277. BUFFSIZE:WORD);VAR OIlIl0l11OO:WORD;OI1I1O01l1ll:WORD;BEGIN OIlIl0l11OO := BOUNDS.B.X - BOUNDS.A.X - 3 ;OI1I1O01l1ll :=
  278. (OIlIl0l11OO DIV 3 );OIlIl0l11OO := OI1I1O01l1ll * 3 ;BOUNDS.B.X := OIlIl0l11OO + BOUNDS.A.X + 3 ;INHERITED INIT(BOUNDS ,
  279. ATITLE , ANUMBER );MODIFIED := FALSE ;GETEXTENT (BOUNDS );BOUNDS.ASSIGN (BOUNDS.B.X - 1 , BOUNDS.A.Y + 1 , BOUNDS.B.X ,
  280. BOUNDS.B.Y - 1 );VSCROLLBAR := NEW (PBXMULTISCROLLBAR , INIT (BOUNDS ));VSCROLLBAR ^. GROWMODE := GFGROWHIY ;INSERT
  281. (VSCROLLBAR );GETEXTENT (BOUNDS );BOUNDS.GROW (- 1 , - 1 );BOUNDS.B.X := BOUNDS.A.X + (2 * OI1I1O01l1ll );LVIEW := NEW
  282. (PBXHEXBUFF , INIT (BOUNDS , BUFF , BUFFSIZE , VSCROLLBAR ));LVIEW ^. GROWMODE := GFGROWHIY ;INSERT (LVIEW );GETEXTENT
  283. (BOUNDS );BOUNDS.GROW (- 1 , - 1 );BOUNDS.A.X := BOUNDS.B.X - OI1I1O01l1ll ;RVIEW := NEW (PBXASCIIBUFF , INIT (BOUNDS ,
  284. BUFF , BUFFSIZE , VSCROLLBAR ));RVIEW ^. GROWMODE := GFGROWHIY ;INSERT (RVIEW );IF ((AOPTIONS AND OFPOSINDICATOR )<> 0
  285. )THEN BEGIN BOUNDS.ASSIGN (2 , SIZE.Y - 1 , 15 , SIZE.Y );INDICATOR := NEW (PBXPOSINDICATOR , INIT (BOUNDS ));INSERT
  286. (INDICATOR );INDICATOR ^. HIDE ;END ;END ;CONSTRUCTOR TBXASCIIHEXEDITOR.LOAD (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );
  287. GETSUBVIEWPTR (S , LVIEW );GETSUBVIEWPTR (S , RVIEW );GETSUBVIEWPTR (S , VSCROLLBAR );GETSUBVIEWPTR (S , INDICATOR );
  288. MODIFIED := FALSE ;MAXPOS := 0 ;END ;FUNCTION TBXASCIIHEXEDITOR.DATASIZE :WORD ;BEGIN DATASIZE := LVIEW ^. DATASIZE ;
  289. END ;PROCEDURE TBXASCIIHEXEDITOR.GETDATA (VAR REC);BEGIN LVIEW ^. GETDATA (REC );END ;
  290. PROCEDURE TBXASCIIHEXEDITOR.HANDLEEVENT (VAR EVENT:TEVENT);VAR OIOllI0O1OI:TPOINT;OII0I11l101:WORD;BEGIN IF (EVENT.WHAT
  291. =EVBROADCAST )THEN BEGIN CASE EVENT.COMMAND  OF CMUPDATEVIEW :BEGIN REDRAW ;CLEAREVENT (EVENT );EXIT ;END ;CMEDITVIEW
  292. :BEGIN IF (EVENT.INFOPTR =LVIEW )THEN OII0I11l101 := LVIEW ^. GETOFFSET ELSE IF (EVENT.INFOPTR =RVIEW )THEN OII0I11l101
  293. := RVIEW ^. GETOFFSET ;INC (OII0I11l101 );IF (OII0I11l101 > MAXPOS )THEN MAXPOS := OII0I11l101 ;CLEAREVENT (EVENT );
  294. MODIFIED := TRUE ;EXIT ;END ;CMCURSORMOVED :BEGIN IF (EVENT.INFOPTR =LVIEW )THEN BEGIN IF (INDICATOR <> NIL )THEN
  295. BEGIN OII0I11l101 := LVIEW ^. GETOFFSET ;INC (OII0I11l101 );INDICATOR ^. SETDATA (OII0I11l101 );INDICATOR ^. DRAWVIEW ;
  296. END ;LVIEW ^. GETXY (OIOllI0O1OI );RVIEW ^. SETXY (OIOllI0O1OI );CLEAREVENT (EVENT );EXIT ;END ELSE IF (EVENT.INFOPTR
  297. =RVIEW )THEN BEGIN IF (INDICATOR <> NIL )THEN BEGIN OII0I11l101 := RVIEW ^. GETOFFSET ;INC (OII0I11l101 );INDICATOR ^.
  298. SETDATA (OII0I11l101 );INDICATOR ^. DRAWVIEW ;END ;RVIEW ^. GETXY (OIOllI0O1OI );LVIEW ^. SETXY (OIOllI0O1OI );
  299. CLEAREVENT (EVENT );EXIT ;END ;END ;END ;END ;INHERITED HANDLEEVENT(EVENT );END ;PROCEDURE TBXASCIIHEXEDITOR.SETDATA
  300. (VAR REC);VAR OO01:LONGINT;BEGIN LVIEW ^. SETDATA (REC );RVIEW ^. SETDATA (REC );MODIFIED := FALSE ;MAXPOS := 0 ;IF
  301. (INDICATOR <> NIL )THEN BEGIN OO01 := 0 ;INDICATOR ^. SETDATA (OO01 );END ;END ;PROCEDURE TBXASCIIHEXEDITOR.SETSTATE
  302. (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );CASE ASTATE  OF SFACTIVE :BEGIN IF (INDICATOR <>
  303. NIL )THEN INDICATOR ^. SETSTATE (SFVISIBLE , ENABLE );END ;END ;END ;PROCEDURE TBXASCIIHEXEDITOR.SIZELIMITS
  304. (VAR MIN,MAX:TPOINT);BEGIN INHERITED SIZELIMITS(MIN , MAX );MIN.X := SIZE.X ;MAX.X := SIZE.X ;END ;
  305. PROCEDURE TBXASCIIHEXEDITOR.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );PUTSUBVIEWPTR (S , LVIEW );PUTSUBVIEWPTR (S ,
  306. RVIEW );PUTSUBVIEWPTR (S , VSCROLLBAR );PUTSUBVIEWPTR (S , INDICATOR );END ;FUNCTION OOlIlOll0O00
  307. (VAR OO1l:TEXTREC):INTEGER ;FAR ;BEGIN WITH OO1l DO BEGIN WINDATA (USERDATA ). DEVICE ^. STRWRITE (BUFPTR ^, BUFPOS );
  308. BUFPOS := 0 ;END ;OOlIlOll0O00 := 0 ;END ;FUNCTION O100l0IlO0II1 (VAR OO1l:TEXTREC):INTEGER ;FAR ;BEGIN O100l0IlO0II1 :=
  309. 0 ;END ;FUNCTION O100lll0II0OO (VAR OO1l:TEXTREC):INTEGER ;FAR ;BEGIN WITH OO1l DO BEGIN IF (MODE =FMINPUT )THEN
  310. BEGIN INOUTFUNC := @ O100l0IlO0II1 ;FLUSHFUNC := @ O100l0IlO0II1 ;END ELSE BEGIN INOUTFUNC := @ OOlIlOll0O00 ;FLUSHFUNC
  311. := @ OOlIlOll0O00 ;END ;CLOSEFUNC := @ O100l0IlO0II1 ;O100lll0II0OO := 0 ;END ;END ;PROCEDURE ASSIGNOUTPUT (VAR F:TEXT;
  312. AWINDOW:PBXTEXTWINDOW);BEGIN WITH TEXTREC(F) DO BEGIN HANDLE := $FFFF ;MODE := FMCLOSED ;BUFSIZE := SIZEOF (BUFFER );
  313. BUFPTR := @ BUFFER ;OPENFUNC := @ O100lll0II0OO ;WINDATA (USERDATA ). DEVICE := AWINDOW ^. INTERIOR ;END ;END ;
  314. PROCEDURE REGISTERTVVIEWS ;BEGIN REGISTERTYPE (RBXFRAME );REGISTERTYPE (RBXMINMAXBUTTON );REGISTERTYPE (RBXICON );
  315. REGISTERTYPE (RBXWINDOWICON );REGISTERTYPE (RBXWINDOW );REGISTERTYPE (RBXTEXTWINDOW );REGISTERTYPE
  316. (RBXFORMATTEDTEXTSCROLLER );REGISTERTYPE (RBXPOSINDICATOR );REGISTERTYPE (RBXMULTISCROLLBAR );REGISTERTYPE (RBXEDITBUFF
  317. );REGISTERTYPE (RBXASCIIBUFF );REGISTERTYPE (RBXHEXBUFF );REGISTERTYPE (RBXASCIIHEXEDITOR );END ;END .
  318.